/*
 * @Author       : xiaoxiaoguai
 * @Date         : 2025-06-04 17:12:23
 * @LastEditors  : Please set LastEditors
 * @LastEditTime : 2025-06-04 17:21:03
 * @Description  : 
 */
// 获取系统信息和计算可用高度的工具函数

/**
 * 获取可用内容高度（减去状态栏、导航栏、tabbar）
 * @param {boolean} hasTabBar 是否有tabBar
 * @param {boolean} hasNavBar 是否有导航栏
 * @returns {Object} 返回各种高度信息
 */
export function getAvailableHeight(hasTabBar = false, hasNavBar = true) {
  // 获取系统信息
  const systemInfo = uni.getSystemInfoSync()
  
  // 屏幕高度
  const screenHeight = systemInfo.screenHeight
  const windowHeight = systemInfo.windowHeight
  
  // 状态栏高度
  const statusBarHeight = systemInfo.statusBarHeight || 0
  
  // 获取胶囊按钮信息（小程序）
  let capsuleHeight = 0
  let navBarHeight = 0
  
  try {
    const capsuleInfo = uni.getMenuButtonBoundingClientRect()
    console.log('capsuleInfo',capsuleInfo);
    
    if (capsuleInfo && capsuleInfo.height) {
      // 导航栏高度 = 胶囊按钮top + 胶囊按钮height + 底部间距
      navBarHeight = capsuleInfo.top + capsuleInfo.height + (capsuleInfo.top - statusBarHeight)
    }
  } catch (e) {
    // 非小程序环境或获取失败，使用默认值
    // #ifdef APP-PLUS
    navBarHeight = statusBarHeight + 44 // App端默认导航栏高度44px
    // #endif
    
    // #ifdef H5
    navBarHeight = 44 // H5端默认导航栏高度44px
    // #endif
  }
  
  // TabBar高度（一般为50px，在有tabBar的页面）
  let tabBarHeight = 0
  if (hasTabBar) {
    // #ifdef APP-PLUS
    tabBarHeight = 50
    // #endif
    
    // #ifdef H5
    tabBarHeight = 50
    // #endif
    
    // #ifdef MP-WEIXIN
    tabBarHeight = 50
    // #endif
  }
  
  // 计算可用内容高度
  let availableHeight = screenHeight
  
  if (hasNavBar) {
    availableHeight = windowHeight // windowHeight已经减去了状态栏和导航栏
  } else {
    availableHeight = screenHeight - statusBarHeight // 只减去状态栏
  }
  
  if (hasTabBar) {
    availableHeight -= tabBarHeight
  }
  
  return {
    screenHeight,           // 屏幕总高度
    windowHeight,          // 窗口高度（已减去状态栏和导航栏）
    statusBarHeight,       // 状态栏高度
    navBarHeight,         // 导航栏高度
    tabBarHeight,         // TabBar高度
    availableHeight,      // 可用内容高度
    safeAreaHeight: systemInfo.safeArea ? systemInfo.safeArea.height : availableHeight // 安全区域高度
  }
}